glcontext: Store the updated area in the right place
authorBenjamin Otte <otte@redhat.com>
Sat, 18 May 2019 14:54:27 +0000 (16:54 +0200)
committerBenjamin Otte <otte@redhat.com>
Sat, 18 May 2019 15:06:08 +0000 (17:06 +0200)
We need to store the region *before* adding our own damage area, because
we want to only store the changes of this frame, not the whole history.

So do it in the same place Vulkan does it.

Fixes #1900

gdk/gdkglcontext.c

index b36b721f490d8439090ed2b617d096ee430d07e2..12a77c827a5caab064fcdb3bf2006e1920598783 100644 (file)
@@ -310,6 +310,12 @@ gdk_gl_context_real_begin_frame (GdkDrawContext *draw_context,
     }
 
   damage = GDK_GL_CONTEXT_GET_CLASS (context)->get_damage (context);
+
+  if (context->old_updated_area[1])
+    cairo_region_destroy (context->old_updated_area[1]);
+  context->old_updated_area[1] = context->old_updated_area[0];
+  context->old_updated_area[0] = cairo_region_copy (region);
+
   cairo_region_union (region, damage);
   cairo_region_destroy (damage);
 
@@ -341,11 +347,6 @@ gdk_gl_context_real_end_frame (GdkDrawContext *draw_context,
       GDK_DRAW_CONTEXT_GET_CLASS (GDK_DRAW_CONTEXT (shared))->end_frame (GDK_DRAW_CONTEXT (shared), painted);
       return;
     }
-
-  if (context->old_updated_area[1])
-    cairo_region_destroy (context->old_updated_area[1]);
-  context->old_updated_area[1] = context->old_updated_area[0];
-  context->old_updated_area[0] = cairo_region_reference (painted);
 }
 
 static void